今天要來實際編譯並執行Non-PnP driver sample,編譯環境已經在Day03建置完成,可以直接用Visual Studio開啟解決方案檔ioctl.sln
,開啟後建置解決方案就可以成功編譯,編譯完成後從exe
和sys
的輸出資料夾分別將nonpnp.inf
、nonpnpapp.exe
、nonpnp.sys
放置在同一資料夾內。
另外Non-PnP driver sample使用了wdfcoinstaller,我們需要透過wdfcoinstaller.msi安裝,連結為WDK 8 Redistributable Components,安裝完成後到對應的路徑將WdfCoinstaller01011.dll
複製至與nonpnpapp.exe
同一資料夾內。
以上檔案都放在同一資料夾後,就可以使用管理者權限開啟命令提示字元去執行nonpnpapp.exe
,此時會發現測試程式有跳出錯誤訊息StartService failure! Error = 577
。
要如何知道這個錯誤碼是代表甚麼呢?可以到Microsoft Learn去查詢,查詢後可以得知是;
ERROR_INVALID_IMAGE_HASH
577 (0x241)
Windows 無法驗證此檔案的數位簽章。 最近的硬體或軟體變更可能已安裝未正確或損毀的檔案,或可能是來自未知來源的惡意軟體。
這是因為我們是使用Debug
來建置解決方案,此時的測試程式的數位簽章是沒有經過驗證的,所以需要將測試模式啟用,才能正常執行測試程式。首先使用管理者權限開啟命令提示字元,輸入:
Bcdedit.exe -set TESTSIGNING ON
之後重新開機,可以在桌面右下角確認測試模式是否成功開啟。
有成功開啟測試模式後,一樣使用管理者權限開啟命令提示字元,接著執行nonpnpapp.exe
,若執行成功則會顯示以下畫面:
可以看到透過DeviceIoContorl
傳到驅動程式的IO control code有被Non-PnP驅動程式正確執行。
Non-PnP Driver Sample - README
系統錯誤碼 (500-999) (WinError.h) - Win32 apps | Microsoft Learn